Gamedev on Windows and Godot


In this post I’d like to share some of the workflows and setup I use, that might be beneficial to someone in a similar scenario.

My gamedev work environment is Windows. I could be working on Linux, and maybe some things would be simpler – but I got used to Windows over the years, and this is where all my games are, including the one I’m trying to remake.

The “language” of choice is Godot. It supports both Windows and Linux, and numerous other platforms I presume. I could not find an easy way to reuse code in Godot between projects. At the same time, I must have the code separated into projects to better organize it, and keep it under control.

For example, I have split the game I’m working on into the following subprojects:

The same can be shown with a dependency graph. The arrow directored from A to B signals “A depends on B, and must have a symlink to B”.

The symlinks on Windows are less intuitive than on Linux. Instead of ln -s, we can use MKLINK. Make sure to choose the right drive letter first, e.g. F:, and then, using absolute paths, to create a symlink in emerald_island linking to emerald_assets.

MKLINK /D \gamedev\emerald_island\assets\icons \gamedev\emerald_assets\assets\icons

This will only link a directory within the target project, but the entire thing – but I find it better to split “what is really needed” this way. Think about it: a menu of functionalities offered by a project. Exception are larger parts, the emerald_world (the actual 3d game) and emerald_menu (main menu and party creation). These I link in full.

A nice thing about new Godot is the icon is changed to indicate it’s a symlink. It was not the case prior to Godot 4.3, so it’s a nice touch. I also color-code them: orange for assets, yellow for local code, grey for “contains symlinks”, and green for “is a symlink root”, as in the following root project, emerald_island.

With the split of the code, I can also use git with it quite effectively. Every subproject has its own repository. That might be a bit annoying, as we risk getting code out of sync, or difficult to track which versions were compatible. Eventually, I might either migrate to a monorepo, or use git modules (as awful as they are!).

, ,

Leave a Reply

Your email address will not be published. Required fields are marked *