My gamedev focus this week has been on adding things that might seem very minor, but that will have a massive impact on the project overall. The first is something that I might not ever use. However, it would be an incredibly long and painful process to add in at the end. Another is something that I don’t expect most players to interact with. It’s something that will allow me to put the game in a state where I can test specific scenarios easily though.
Like I said, minor things that improve my quality of life while developing!
We’ll start with something that I’ve posted a couple of tutorials about recently – localisation.
Adding localisation to the game
Last week, for the first time in months, I didn’t write a weekly devlog. That was because I’d not made any progress on my actual game. Instead, I’d spent my time investigating how Godot handles localisation, and then writing up my findings into two tutorials. One is about using one or more CSV files, while the other explains how to use gettext.
If you’ve read both of them, it will come as no surprise that I decided to use the gettext approach.

I won’t go into full detail about why I’ve chosen to use gettext – I’ve explained the pros and cons very thoroughly in the tutorial post. My main reasons are:
- It’s easy to automate, and thus easy to scale without human error
- I can write simple plugins to parse any data files, such as Godot’s Resources, or json files, for translation keys
- Adding a new scene to the translation template generator is trivial. Godot finds every string in that scene and automatically adds it to the template
So, with this in mind, I’ve added a couple of scenes to the POT generator. I’ve changed all the strings in these scenes to be translation keys, the format for which is all capital letters with an underscore between words. I’ve created the plugins for Godot resource files and json files, although I’ve yet to create a parser for specific data structures. Finally, I’ve set up the English (GB) translation file so that the strings are updated.
My intention is to update each scene with translation keys when I next work on it. I’ll do the same for my data files too. It’s something that will probably add 10-15 minutes work to each feature. There is a risk that it’s something I’ll never actually use. But it’s something that could take me months to add in at the end of the project. So I’ll count that extra 10-15 minutes as time well spent.
Developer console
The vast majority of games have some kind of developer console with commands that skip gameplay. The Elder Scrolls games, for example, have commands that can set various stats, or story flags, or update quests. XCOM has commands that kill all the aliens on a map, or reset the mission, or complete research. These aren’t intended to be used as a part of normal gameplay, although they can be useful to circumvent bugs, or test mods.
They are intended, mostly, to allow the developers and testers to get the game into a specific state without needing to play for hours.
This seems very useful to me, especially since I intend my game to have a storyline that takes several hours to play. So I’ve added a developer console.
I searched the Godot Asset Library for “developer console” and found two options.
GDScript developer console by jitspoe
The first is by jitspoe. Unfortunately for me, it only supports GDScript out of the box. However, when I navigated to the github page, I found that several pull requests to enable C# compatibility had been approved. I was able to copy these C# bindings into my project and update console_plugin.gd to point at the C# version of the console. Within minutes, I had it set up and running.

I could see from the github page that jitspoe is actively maintaining this addon. A massive green flag in the world of software development. And, in his tutorial video for the addon, he has a magnificent moustache.
C# developer console by hamsterbyte
The second developer console addon I found is written by hamsterbyte. I liked the look of this one because it was written primarily for C#. The video detailing the different features showed me that this console was incredibly powerful. I especially liked the way that it’s possible to view the available functions as a graphic interface rather than just text. However, I felt that the way one needs to define functions was a bit too rigid for my tastes. And when I tried to install it, there were conflicts with my project, which seemed to be related to Godot version.
I visited the github page to see if there were any solutions, or potential updates in the works. There I discovered that this addon hasn’t been updated for two years and the author hasn’t responded to any issues recently.
And so I decided to use jitspoe’s console. It works and the addon author is actively updating it. What more could I ask for?
Adding a loading screen
With these two big quality of life additions out the way, I decided to do something that the player will see, although hopefully not too often and not for too long. I made a loading screen for the game.

I’ve kept it simple for now, mostly because my artistic abilities are lacking. I drew the snowflake in Krita after watching a tutorial about the multi-brush tool. Then I used tweens to animate it after importing it into my loading screen.
I did find that looping a rotation tween doesn’t quite have the effect you’d expect. The object will rotate once and then stop. This is because it’s already reached the final angle, but hasn’t been reset back to its initial angle. My solution to the problem is to change the tween so that it adds another 360 degrees onto the snowflake’s desired angle after each full rotation.
private void RotateSnowflake()
{
if (SnowflakeTween != null)
{
// if we've already got a tween, we unsubscribe to the finished event
SnowflakeTween.Finished -= RotateSnowflake;
// doing this helps avoid memory leaks
}
// create a new tween
SnowflakeTween = CreateTween();
// set the desired angle to the current angle + 360 degrees
SnowflakeTween.TweenProperty(Snowflake, "rotation_degrees", Snowflake.RotationDegrees + 360, IconRotateDuration);
// subscribe to the finished event with this same function
SnowflakeTween.Finished += RotateSnowflake;
// this function will then be run after every 360 degrees rotated
}
I added a short (0.2s) fade out on the loading screen that’s triggered once the game is done loading a new scene. And then when I tried it out, I didn’t see the loading screen at all, because my game currently loads too fast. This is, of course, an amazing “problem” for me to have – nobody wants long loading times – but it did mean that testing my loading screen was difficult. So, in order to test it, I set the loading screen fade out to 2 seconds. This was long enough for me to actually see the loading screen appear and fade out.

It’s a simple screen that I hope won’t be seen too often, but will indicate to players that something is happening. I think it looks quite cool (pun not intended, but it’s staying), but I am somewhat biased.
Starting the main menu
I also decided to start building the main menu that will appear when the game first loads. I wanted to experiment a bit with Godot’s particle emitters after watching a very thorough tutorial by Godotneers. I’m quite pleased with my efforts.

It’s obviously nowhere near finished. I definitely want to commission some sort of artwork, and I’ll need the name of the game on there… when I actually decide on a name.
For now, I’ve put the snowflake I made before at the top, as though it’s the logo for the game (it totally is the logo for the game until I commission something). The snow is done as a particle effect using Godot’s 2D particle emitter, which I found very easy to create using Godotneer’s tutorial to guide me to the correct settings. I might have found the sheer number of options overwhelming otherwise. Having all these options available and seeing the particle effect update immediately in the editor is an amazing feature, though.
Global theming
The buttons on the main menu are the start of my game’s global theme. I intend to update the rest of my controls in the same way I’m updating the localisation – when I next work on that control, I’ll change it to match the global theme. Maybe the world map has already given away the general theme. Or you might have guessed from the snowflake icon, and the falling snow. I’m trying to go for a cold and icy theme. Please do let me know if you think the theming so far works!
I’ve also started looking for a global font for the game. I had found three fonts that I quite liked (and that satisfied my requirement of having every accented letter available in case of translation later).



I’ve asked a few people for feedback so far and the general consensus is that these fonts are all a bit too hard to read, so I’m still hunting for a sans serif font with a fantasy feel to it. But if you think one of these would be a good general font for a game, tell me either in a comment here or on bluesky.
What’s next?
This week, I feel like I’ve added quite a lot of small things that are going to improve my development experience.
The localisation considerations will make it easy to translate if I end up in a position where I want to do so.
Adding a developer console will help me test specific scenarios quickly without having to go through the faff of playing through the game every time.
And starting to make a global theme will have two effects. Firstly, it will force me to build the UI so it works for the theme rather than trying to shoehorn in style choices later. Secondly, it will help me feel more immersed in my game, and so hopefully guide me to better development choices.
The next big thing I have planned is also on the more technical side of development. I want to add good tooltips to the game. I feel like tooltips are a vital part of any strategy or tactics game since it’s important for the player to be able to find out exactly what the various abilities do, what the keywords mean, and how they interact with each other without needing to resort to a manual or a wiki, or something similar.
Since I’m also developing the global theme for the game, I’ll take breaks from this technical work by making changes to controls so I can see how the theme looks across the whole game.
It should be an interesting week.