Wow, two weeks flys by fast! Well, two and a half in this case (or longer depending on when I finish this post and publish it!)
For this Dev Log, we'll be covering a lot of the finishing touches that I ended up putting on Version 0.9.21, which I'm happy to announce is now live on Steam! As always, a comprehensive list of changes can be found on the changelog on the forums. There's been a lot to cover, and I'm excited to dive into it all, but first, a quick aside on my versioning convention!
A Note on Versioning
A few people have asked me why so many numbers so I just wanted to go over it quickly. It makes perfect sense to me, but it's an important number for other people to understand as well, particularly when they're filling out bug reports, so it's definitely a good idea to cover it. There are two places in-game that you can find your version number. The first is in the bottom-left of the screen when you first start the game, and second is at the bottom of the Main Menu. There are 4 important bits of information in the version number, one of which was just added with the latest release of the game, so let's break it down:
0.9 - This is the current "Version" of the game. We're still in a beta, so it's not 1 yet. The idea here is that the game state at the end of Early Access will be Version 1 .
.21 - This is the current Patch of the game. This increments every time there is a content update or major revision to the game. This will reset to 0 with every change to Version.
.1 - This is the current Build of the game. This number will increment every time there is a new upload to Steam and will never reset itself. This helps me keep track of smaller changes to the game such as hotfixes. This late addition to the club came about as a result of it being difficult to track down specific changes to a players version when trying to figure out if a bug is still present after a hotfix on Steam.
And there you have it! I hope that clears the air around versioning! I know that there are a million different ways that versioning is done. This way just makes sense to me, and fits my needs quite nicely! Let me know how you write out your versions in the comments section, I'd love to nerd out about some numbers!
I've done a lot more than just jive on a short string of numbers, but there's one particular item from my last dev blog that I want to cover in a bit more detail. Strap in, this is going to be a twisty and turny adventure with road bumps, pot-holes and it all starts with a quick trip down memory road...
I'd like to start this off with an optimistic quote from past F0lak:
"The system has needed work for a very long time, and I've got myself poised to gut the old and rebuild it anew over the next few days." - F0lak, two weeks ago
Let's dive into this days long adventure!
The problem that let to this little escapade had been hanging around the game for awhile, so much so that it had gotten more than one report. Given that it was a pretty annoying glitch, and the fact that .21 was largely about Quality of Life and polishing the current iteration of the game, it didn't make sense to let this issue go unresolved for any longer. The central issue is one that crops up quite often with an old codebase like this: Core systems were developed by teenagers with no concept of future-proofing or scalability. In other words, the code that handles Items, which are anything that you can pick up, was written when we were somewhere around 14 years old, and has gone largely unchanged since then. Sure, there's the occasional tweak here or there, or maybe a bit of additions to it as time has gone on, but eventually something is going to break due to a very fundamental reason: The original system wasn't designed for this.
I'm going to be completely honest here. I still don't know what was actually causing the bug. I do however remember trawling the call stack and combing the debugger in order to try and find the cause, and kept coming up on item handling then hitting a dead-end. So, naturally, rather than continue to track the issue through the winding hallways of an ancient tomb of ill-designed code, I decided it best to bring the roof down and start anew on a solid foundation.
After sharpening my gutting knife and pulling the entrails from one of, if not the, most important systems in the game, I put to work putting it back together, piece by piece. Nothing could have prepared me for the disaster that was about to befall my precious little game. In short (and probably unsurprisingly, everything broke).
But that's okay! Because we knew this would happen, so now all that I had to do was spend two weeks rebuilding it! I started by rewriting the basic item code, and even got so into it that I ended up using a notebook to keep track of everything. I'm happy to say that the book has continued to be a useful part of my toolkit. It's open beside me almost every time I'm at my computer now.
In order to test the item handling properly, I needed to take another look at how inventories worked, so I took care of that next. Haz now uses a series of container objects to keep track of inventories, storage objects and equipment lists. It's a pretty nifty system!
After the groundwork was laid out, I just had to tie it into the GUI, which believe it or not was the most difficult part. Adding stack splitting and the organization to the game added a level of complexity that I hadn't really dealt with before. It was a really fun challenge to face and I'm very happy that I managed to get it all sorted out.
This is getting extremely verbose and bordering on a Deep Dive, so I digress after this final note on the subject: The new item handling system is in. All of the internal mumbo jumbo aside (the new system is so shiny and much easier to work with!) the main difference for players is that you can now organize inventories and storage objects, as well as split stacks of materials up by holding ctrl.
I'll elaborate more on the inventory and item handling in a Deep Dive post, but for now let's move on!
Moving Along, Then!
While the inventory and item handling is definitely the biggest change, at least internally, I also finally got around to adding some ambient music tracks to the game! I'm so happy to finally get more of Yemmie's music into the game, and I can't wait to get more of her music and SFX added! (it's on the todo for 0.22!) So far I've added one for the afterlife, two for the general overworld, and one for the new dungeon.
Speaking of a new dungeon, I've added the second dungeon! I also did a bit of work on Hazordhu's first proper Boss fight! I don't want to spoil too much of it for you though, so you'll need to play through it to get to the fun bits!
Along with the boss, I also added in some new effects for the dungeon to give it a more eerie feel to it! I'm really happy with how this fog effect turned out, and there are some clever tricks that I used, so be sure to keep an eye open for the deep dive post that covers it!
On the back-end, Kaiochao has graciously spent some time on the source the last couple of weeks doing a bit of house cleaning and refactoring. If you don't know, he's the one that handled the bulk of the programming for a large portion of Hazordhu's life. I'm not sure how long he'll be working on the project for this time around, but I'm glad for the help! We've managed to track down a bug in the engine pertaining to mouse input, which as of writing this looks to be resolved, so that's good news!
And finally, one last bug that has been the butt of too many jokes over on discord. I finally fixed the name of foliage, so it's no longer called "a child". Sorry Meachie!
That's about it for this blog post! I'm sure that I missed a few things, but it's been a hefty two weeks, and I've been doing a lot of freelance work on the side as well, which has me pretty tuckered out! If you're already a Patron, thank you so much for your continued support. It helps me pursue a dream and help others with theirs! If you aren't yet on board, what are you waiting for? Head over and select a tier, and help me be able to continue doing work like this now and far into the future!
If you're new to these parts and haven't joined yet, head over to Hazordhu's Discord server. If game development interests you, you'll find me streaming there whenever I'm working on the game.
Until next time, Happy Roleplaying!