Sorry it's been a bit quiet on the update front lately. It's been one
of those months where everyone on the team has something else happening
in their lives (including me) so productivity hasn't been at it's peak.
Personally I've been dealing with a bit of illness coupled with some
severe frustration at a particular engine issue (which this blog is
about).
Ethan, our modeller, is aiming to have two full
subterranean model packs done by the end of this month though (the
abandoned mine and the ancient crypt), and I know that Carrie is working
on a new character glamour pic, which will be cool. It's the first one
of a male character, so I'm sure you'll all love that.
Rachel is
busy with work at the moment but is very eager to get back to
Malevolence soon and has a HUGE amount of stuff planned, including some
more awesome armour and a MASSIVE amount of in-game items.
Work has also started on your character portraits. Nothing at "showing off" level just yet, but shouldn't be too far away!
But
anyway! Technical issues. Basically, in game development, there is a
process colloquially referred to as "garbage collection" where the
engine finds and clears things from active memory to conserve system
resources. Sometimes it's required that the engine complete something I
like to call an "86 purge" where garbage collection happens to
EVERYTHING stored in memory. In a normal game, an 86 purge would be used
when the player quits the game and returns to the main menu. All of the
in-game 3D models would have to go, then all the sounds, all the
textures, all the music, all the shaders, all the heightmaps... Then
each individual background process would have to be shut down, like the
AI controller, the audio housekeeping, the animation updator, etc.
There's no way to just say to the computer "remove everything from
memory". You have to actually keep a running tab on everything that has
been loaded or that is running in the background and then remove or shut
down each one individually. Make sense? Pretty standard stuff in game
dev.
Anyway... Malevolence, being not your average game, was
developed in a strange way. It's built in three modules, with each
module being used to handle each of the three environment types in the
game. The first module that was developed was the subterranean module.
It's loaded whenever the player enters a dungeon, crypt, mine, cave,
etc. It has its own lighting systems, audio systems, etc, which all work
to make the environment appear a certain way to the player. Then, once
that module was all good and done, we worked on the overworld module.
This one was probably the most difficult by far, as it's the only one of
the 3 modules that is infinite in size. World chunks had to be loaded,
heightmaps for terrain, water had to be handled, the movement of the sun
and the procedurally generated sky system... Lots of things at once,
and very different to the subterranean module. Finally we developed the
town module, which was very similar to the countryside module, but
without the heightmaps, water or... You know... Infinity... So that was a
bit easier. But dealing with that many complex objects with a large
view distance posed problems of its own. Dungeons are dark and cramped,
so you can never see very far, so it was easy to get system efficiency
in them. Towns are open plan, with big wide courtyards and lots of NPCs
and buildings and props like barrels and statues all being seen at once.
Much trickier, but we got it working.
The hard part (which has
been giving me trouble lately) is linking the three modules together and
handling the 86 purges that are required during the move between each
section. A little while back I got very excited when I was able to walk
out of the starting dungeon and into the countryside for the first time,
but it was short lived as I realised that I couldn't go back into the
dungeon, or into any other dungeons that I happen to come across, as
doing so would cause a massive memory leak and crash the game.
But,
last night, all that changed. I walked out of a dungeon into the
countryside, then back into the dungeon again, then back out again. I
then took a stroll through the wilderness until I came across another
dungeon entrance. I clicked it and went into that dungeon, too! Then out
of it. Then I walked and found a town and went into it, and then out of
it! All seamlessly! Turns out that I had overlooked a couple of small
things in the 86 purge that I was doing which caused a fatal memory leak
between environments, but now it all works great!
So yeah, that's
why there hasn't been much to see lately, sorry. Lots of background
coding stuff going on. But now that it's working, I can focus on some
really important things like having monsters in the countryside, putting
in shops and other establishments into towns, etc. All the exciting
stuff. And let's not forget, of course, the Kevin Bacon quest system!
So
yes. Life will still be getting in the way over the next couple of
weeks, but I'm taking time wherever I can to plug away at some more
things, and as soon as new art assets come in, I'll do another update to
show off the sexiness!
Thanks for being patient with us and for all the wonderfully awesome comments you all make! It really gives us steam!





I would love to see a video demonstrating this fix. :D (hint, hint)
ReplyDeleteHaha we'll be shipping off a proper build soon to our test team who will hopefully do another Let's Play video for us! :D
DeleteDude, there are over 1000 people who recently gave you over $30,000. The least you could do is pop in once a week to say "Hi"...if only to reassure us that our money isn't funding your "something else happening." ;)
ReplyDeletehaha sorry, we do actually update other blogs. This particular blog is for more technical topics. The content topics are posted at our IndieDB blog :) http://www.indiedb.com/games/malevolence-the-sword-of-ahkranox
DeleteNo worries; it was more of a tease than anything else. :) Glad to see progress is coming along so well, although I'm sorry you're losing such a talented member of the team.
DeleteMuch love and prayers!
Thank you! :D
Delete