Devlog 2024-01-13

I missed a whole year of posts. That wasn’t really my intent, but so it goes, sometimes. I’m in the process of trying to fit blogging back into my life, so I’ll start by summarizing what I would have posted about over the last year. I might end up breaking this post up into chunks, we’ll see!

Checklist

  • completed Black Mountain’s Godot 4 migration
  • poked away at small additions and refactors in Black Mountain
  • released a tiny Godot plugin, gd_editor_size
  • finished up a small library project, Multipoly, became indecisive about what to do with it
  • mostly finished a new project, Escape from Evil Island
  • a bunch of life stuff

Black Mountain migration

According to my git logs, I “finished up” the migration to Godot 4 in April (which I wrote about in my last post of 2022). Unsurprisingly, there were a few lingering bugs, which I fixed over the next few weeks. I don’t have any particularly interesting new insights from the rest of my Godot 4 migration, mostly because it’s been more than a year since I actually did it. I probably had some final bits to say about it, and, in fact I thought I had a draft post that I had begun working on, but it seems to have gone missing other than the screenshot above. Ah well. The biggest changes were around asynchronous code (since Godot 4 introduced the await keyword), but beyond that it was mostly just updating calls to built-in functions to use new names, and an excuse to just clean up some logging and the like.

Additions and Refactors to Black Mountain

The migration gave me a big hairy problem to deal with that was fairly straightforward (in the sense that I had a game that didn’t work anymore, and I wanted to turn it back into a game that did work). I had hoped that would give me a way to ease back into more routine work on the game. Unfortunately, with the migration done, the difficulty I’d been having after the large upheavals in my life in 2022 reared its head again.

I spent a bit of time doing some visual updates to Black Mountain. Frankly, it probably wasn’t the best use of time right then, but I was having trouble staying motivated to work on the project.

I redid the title screen, and updated the name of the game series to be “The Wayman Saga”. Previously I was using the name “Tales of West Run”; West Run is the geographical region that these games take place in, and I liked the name of it. Unfortunately, that name leans a lot closer to a few other fantasy properties than I’m comfortable with (notably the continent of “Westeros” in A Song of Ice and Fire/Game of Thrones and the “Tales” series of video games). Could I have kept using the same name? Maybe! But I wasn’t happy with it.

“The Wayman Saga”, instead, puts the focus on Kiel and her family (the Waymans). I’m honestly not completely sure I like putting that much focus on the Waymans in general, but it feels more “mine” and it’s what I’m running with for now. I could change my mind again!

I also switched up fonts (changing over to some fantastic fonts I picked up from somepx on itch.io), I did some refactors in some places of code that were bugging me, as well, as another angle to try and get back into development, I incorporated a plugin I wrote (Multipoly, which I talk about below), and I even drafted in a cutscene I’d been intending to write for a while. Unfortunately, while I think these were mostly good work, ultimately I didn’t build back up the momentum I’d hoped for. I stalled out again.

An editor plugin: gd_editor_size

In the mean time, I packaged up and released an editor plugin for Godot (and by “released” I mean I posted about it exactly once on Mastodon) which fixes an annoyance I have with Godot – it does not save your editor window size settings. Add it to your project and it will start saving off the size of the window when it changes, and restore it when you launch the project. I released it as public domain (CC0, technically), so feel free to use it however you’d like.

gd_editor_size on Github

Honestly I don’t think this plugin should need to exist, but it’s kind of cool that I can just make it exist, I suppose!

A library: Multipoly

Also in the mean time, since I was stalling out on Black Mountain itself, I tackled another technical issue I’d been having with Godot. This proved to be a much stickier problem, and I had to start from scratch a number of times, but eventually it turned into what I call Multipoly. There’s a bit of “backstory” I need to fill in on this, and really I think Multipoly deserves its own post, so I’m not going to go into details at the moment, but the short version is that Multipoly is a way to use arbitrary, nested polygons, and do boolean operations with them (cutting a polygon with a hole in it out of another polygon with a hole in it, for instance, where the holes may or may not overlap, etc). This proves to be surprisingly difficult and, for the thing I was trying to do, Godot simply threw its hands up in the air and gave up.

So now I have a library. It’s been incorporated back into Black Mountain, where it is used to set up the navigation meshes in a level – I can now have smart path finding through a level for both mouse-control of the player, monsters wandering around, and for cutscene “puppet” entities.

I wrote it as a library because I intended to finish it up and release it at some point! But that turned into work and when my immediate need for Black Mountain was solved I put it down, and haven’t picked it back up again. Also I had some hope that perhaps changes in Godot 4.1 or 4.2 (or beyond) would obsolete the library before it was even released. I honestly don’t even know if it has been rendered unnecessary in the last few months! I need to check up on that.

Escape From Evil Island

So barring all of that, I decided that I just needed a fresh look at some new project for a bit.

A long, long time ago I took some time away from making Black Mountain to work on some other small game ideas, that I would build as quickly as possible. The little platformer that I made back then kept tickling at the back of my head, and I figured maybe it was a good idea to brush that off, update it to/re-implement it in Godot 4, and expand it! I figured that, since I’d built the first one in a few days, I’d take a month on it this time, and surely that would be enough to make it 3-4 times bigger?

Well, the logic kind of checks out, but perhaps unsurprisingly, it didn’t actually work out that way. I had the basic framework back up and running in Godot 4 pretty quickly – there was a lot less to port, the porting has gotten much better than it was during the betas, and I let myself just rewrite anything that I felt was better off that way. I also have the benefit of an ever-increasingly robust little library that I keep as a “base” for new projects, which includes some handy utilities and stuff that I really don’t need to be writing over and over for each game.

Then it came time to draw art and build out content. These are parts that always take me way way longer than I expect, so… here we are, six months later, and I am finishing the last couple of levels (which, as suggested by someone who knows a bit about level design, are the final and first levels of the game).

That said, I am pretty confident this game will actually be finished relatively soon (or at least, I’ll be getting some people to play it so I can find out how uneven the difficulty feels), and so I’ve added a project page for it:

Escape from Evil Island

My current plan is to release it on itch as a “pay what you want” thing – it was always intended as a free game, really, but it ended up taking enough time that I figure if anyone wants to throw me a dollar for it or whatever, I’ll let them! It also lets me get a little more insight into itch’s payment back-end etc so I can find out if it’s something I want to/is worth it to engage with in the future.

Other Life Stuff

And of course, I sadly can’t just work (or not-work, as the case may be) on a bunch of small indie games as my entire life, so 2023 also saw me

  • get two new kittens (who are adorable and very bad in equal measure)
  • get laid off from my job
  • find a new job, despite the current state of the tech industry