Lurking Behind dev log – day -1 #1

Hey hey! This is the initial dev log entry for a personal project that I work on from time to time. There is no particular reason I wanted to start writing this dev log, but since I haven’t done a proper one before, I might as well.

The game

The core gameplay idea for this project is to put a player on a randomly generated map, give them a timer which shows the time until the main boss of the dungeon spawns in the starting area and let them explore the dungeon, kill enemies, level up, gather stuff, etc. – basically, prepare for the final showdown. Once the boss is spawned, it starts patrolling around the map in search of the player. This continues until a set amount of time, after which the boss darts toward the player and initialises the final fight or the player and the boss run into each other before the timer runs out. This timer is closely related to the boss’ health so that if the player decides to start the fight early they are given a handicap – the boss’ health is lower.

The game’s design is not final – there are many more things that I want to explore and think about, however, there are design pillars that I will use as a guide, and these are:

  • Fairness. If the player dies I want them to sigh and say “Fair enough”. Personally, I don’t enjoy games that take a lot of control from you and put it into the hands of a random number generator.
  • Low skill floor and high skill ceiling. I want to provide the players with various tools, some could be easily understood and used straight away, while others would require a deeper understanding of the game, the environment, the player and the enemy.
  • Movement is key. Since the player will have to fight battles, while also trying to avoid running into the final boss, movement will be the most important tool for the player. I want to polish it as much as I can, so it feels right.

In the original design document the game was inspired by the Binding of Isaac (which I have not even played to this day, lol. But I do hope to play it one day in the future) and originally was intended to be a roguelike, however, I am yet to fully decide on what wins the fight between a rogue-like and a rogue-lite. I may even scrap the perma death, though I doubt it at the moment.

Currently, I do have small nuggets of lore and a story I want to tell, but that won’t be the major part of this game. The blue door will remain just a blue door.

The story so far…

I started this project after the first semester of my first year at University – a bit more than 3.5 years ago at the time of writing. So why am I making a blog post now? Well, I decided to get back to this project after almost a year of inactivity, since due to university I couldn’t work on it at all. And with this decision came the new sailing wind. A wind that brings change. An engine change. Because what great game doesn’t get an engine switch mid-development.

Jokes aside, from the time when I started the original project I learned quite a few things in code, game design and in project management. The old code base is riddled with useless and poorly explained abstractions, some of them were caused by the “oh, I learnt something new, I want that in my code!” way of thinking, which sometimes lead me into a refactoring hell. Additionally, even though I knew that the feature creep needs to be avoided, my flesh is still weak and thus I fell for it. Which also leads to not having any kind of stable playable demo. All of this already made me consider ripping out the good parts and starting anew. But at the time I was still thinking of using Unity – the engine that I started with.

Fast forward to today (2022/07/17). Unity has done some shady things. That’s when I started looking into the Godot engine. The thing that really pushed me towards it was the lightweight structure. While starting a project in Unity already felt like a chore, Godot’s start-up time was near instant. Pairing that with VS Code, instead of Visual Studio, made quite a great way to keep the energy high when sitting down to work on your passion project and not succumb to the demons of procrastination. Furthermore, Godot had two more things that were important to me:

You could use C# as your scripting language. First I love writing in C#. It was my first language and it just has a sweet spot in my heart. I do understand and agree that programming languages are just tools meant to be used based on the needs, but I just find enjoyment in writing some little silly things in C#. Additionally, since the good parts of the original project are written in C# it will be easier to transfer them. The needed functionality and plugins were present. There were two features I needed – support for Aseprite files and a tool for making grid tiles + having a way to paint with them. And both of these requirements seem to be met community produced extensions and in-built features. And to be perfectly fair, the “Oh? Shiny! Want!” spirit is alive and kicking inside of me – surely nothing wrong will come out of that… Having said that, the only feature that I feel like I will truly miss from Unity is the IJobParallelFor – which I used for my pathfinding. The solution used was broken, but after some experience that I had, I think I could have fixed it. On the other hand, Godot supports C++ and C, which could be used to create extensions that would help with optimisations, if they were needed.

So, after consideration, I decided to jump ship with this project and start anew using Godot. Worst case scenario I will have to go back to Unity. But even then I will still be able to work on the original with the power of friendship and source control + I will have learned a new engine. So the worst case isn’t even that scary.

The day -1

This time instead of jumping right into making a game, I started by making a simple main menu. I think it was actually a good way to start getting into the engine and this way I already made something I didn’t have in the original project. I followed the advice I’ve found on Twitter about properly scoping projects:

Though I did run into some oddities and issues here and there, most of the things were trivial and all of them had a workaround. So I present to you a basic main menu!

Nothing fancy. Just a main menu screen with 4 buttons, 2 of which actually do something: “Quit” – in an unpredictable fashion will close the window and “Start” will open a menu which will allow users to configure the dungeon they are going to jump into and what character they will use!

So here it is! A humble little start to a semi-new journey! See you later!

Leave a comment